package com.epalmpay.service.iccard;


import java.util.List;

import com.epalmpay.dto.activity.OtherCouponImportInDTO;
import com.epalmpay.dto.iccard.IcCardImportInDTO;
import com.epalmpay.dto.iccard.IcCardInDTO;
import com.epalmpay.dto.iccard.IcCardOutDTO;
import com.epalmpay.dto.iccard.IcCardShowListDTO;
import com.epalmpay.entity.MemberICCardInfo;
import com.epalmpay.entity.Page;
import com.epalmpay.entity.Response;
import com.epalmpay.exception.ApplicationException;

public interface IIcCardService {
	
	/**
	 * 获取实体卡列表
	 * @param icCardInDTO
	 * @param page
	 * @return
	 * @throws ApplicationException
	 */
	IcCardShowListDTO selectIcCardList(IcCardInDTO icCardInDTO,Page page) throws ApplicationException;
	
	/**
	 * 获取实体卡所有使用状态列表
	 * @return
	 * @throws ApplicationException
	 */
	List<IcCardOutDTO> selectIcCardStatusList() throws ApplicationException;
	
	/**
	 * 自动废弃挂失时间超过48小时的实体卡
	 * @return
	 */
	int updateAutoDiscardIcCard(IcCardInDTO icCardInDTO);
	/**
	 * 根据实体卡会员ID，和渠道ID，查询到该会员在该渠道下的使用的已绑定的或已挂失的实体卡
	 * @param memberId
	 * @param groupId
	 * @return
	 */
	IcCardOutDTO selectIcCardByMemberIdAndStatus(Long memberId,Long groupId) throws ApplicationException;
	
	/**
	 * 传入渠道ID和要生成的实体卡的数量，批量生成不记名，未激活的实体卡
	 * @param icCardInDTO
	 * @return
	 */
	boolean insertIcCardBatch(IcCardInDTO icCardInDTO);
	
	
	/**
	 * 修改实体卡启用禁用状态
	 * @param icCardInDTO
	 * @return
	 */
	boolean updateSwitchStatus(IcCardInDTO icCardInDTO);
	
	/**
	 * 去保存对实体卡的修改操作
	 * @param icCardInDTO
	 * @return
	 * @throws ApplicationException
	 */
	boolean updateIcCardById(IcCardInDTO icCardInDTO) throws ApplicationException;
	
	/**
	 *根据实体卡ID,查找对应的记录 
	 * @param icCardInDTO
	 * @return
	 */
	IcCardOutDTO selectIcCardById(IcCardInDTO icCardInDTO);
	

	
	/**
	 * 废弃卡,删除卡
	 * @param icCardInDTO
	 * @return
	 * @throws ApplicationException
	 */
	boolean deleteIcCardById(IcCardInDTO icCardInDTO)  throws ApplicationException;

	/**
	 * 根据实体卡卡号查找实体卡信息
	 * @param icCardInDTO
	 * @return
	 * @throws ApplicationException
	 */
	IcCardOutDTO selectIcCardByIcCardNo(IcCardInDTO icCardInDTO)  throws ApplicationException;
	
	/**
	 * 绑定实体卡
	 * @param icCardNo
	 * @param memberId
	 * @return
	 * @throws ApplicationException
	 */
	Response updatePinlessIcCard(String icCardNo, String memberId) throws ApplicationException;
	
	/**
	 * 导入实体卡信息
	 * @param icCardImportInDTO
	 */
	IcCardOutDTO insertIcCardImport(IcCardImportInDTO icCardImportInDTO);
}
